package controleur;

import modele.Unite;

public class ControleurUnite {
	// Variable(s) d'instance
	private final Unite unite;
	
	// Constructeur(s)
	public ControleurUnite(ControleurObjectif objectif, int label) {
		this.unite=new Unite(objectif, label);
	}
	
	// Methode(s)
	public ControleurObjectif getObjectif() {
		return this.unite.getObjectif();
	}

	public ControleurCoordonnee getCoordonneeActuelle() {
		return this.unite.getCoordonneeActuelle();
	}

	public ControleurTrajectoire getTrajectoire() {
		return this.unite.getTrajectoire();
	}

	public int getLabel() {
		return this.unite.getLabel();
	}
	
	public void setObjectif(ControleurObjectif objectif) {
		this.unite.setObjectif(objectif);
	}

	public void setCoordonneeActuelle(ControleurCoordonnee coordonneeActuelle) {
		this.unite.setCoordonneeActuelle(coordonneeActuelle);
	}

	public void setTrajectoire(ControleurTrajectoire trajectoire) {
		this.unite.setTrajectoire(trajectoire);
	}
	
	public ControleurCoordonnee deplacer() {
		// Deplace l'unite sur la prochaine case de sa trajectoire s'il y en a une et retourne les coordonnees de cette case
		// Retourne null sinon
		
		ControleurCoordonnee coordonnee;
		if((coordonnee = this.getTrajectoire().getProchainMouvement()) != null) {
			this.setCoordonneeActuelle(new ControleurCoordonnee(coordonnee.getX(), coordonnee.getY()));
			return coordonnee;
		} else {
			return null;
		}
	}
	
	public boolean estArrivee() {
		if(this.getTrajectoire()==null) {
			return false;
		} else {
			return(this.getCoordonneeActuelle().equals(this.getObjectif().getArrivee()) ||
				this.getTrajectoire().getIndiceActuel() == this.getTrajectoire().taille());
		}
	}
}
